View Javadoc

1   package uba.db.sql.server;
2   
3   import java.io.File;
4   
5   import uba.db.Database;
6   import uba.db.impl.filesystem.FileSystemDatabase;
7   import uba.db.sql.interpreter.Interpreter;
8   import uba.db.sql.interpreter.QueryPlanner;
9   import uba.db.sql.interpreter.sentencevalidation.SentenceValidationException;
10  import uba.db.sql.language.Sentence;
11  import uba.db.sql.parser.SQLParser;
12  import uba.db.sql.parser.SQLParserException;
13  
14  /***
15   * Ejecutor de consultas. Desde acá se consiguen los objetos que representan las
16   * consultas, se arma el plan de ejecución, y se devuelven los resultados al
17   * cliente.
18   * 
19   * @version $Revision: 1.14 $
20   */
21  public class ServerProcessor {
22  	private SQLParser parser;
23  
24  	private Interpreter interpreter;
25  
26  	private Database database;
27  
28  	private QueryPlanner planner;
29  
30  	private ServerDataConverter converter;
31  
32  	private QueryPlanner queryPlanner;
33  
34  	/***
35  	 * Constructor default. Inicializa las variables privadas.
36  	 * 
37  	 * @param databaseDirectory
38  	 */
39  	public ServerProcessor(File databaseDirectory) {
40  		parser = new SQLParser();
41  		database = database(databaseDirectory);
42  		interpreter = new Interpreter(database);
43  		queryPlanner = new QueryPlanner(database);
44  		converter = new ServerDataConverter(queryPlanner);
45  	}
46  
47  	/***
48  	 * Se buscan y construyen los resultados que implica la consulta. .
49  	 * 
50  	 * @param s
51  	 *            El string de la sentencia.
52  	 * @return La tabla de resultados a mostrar.
53  	 */
54  	public String execute(String s) {
55  		Sentence resultadoParseo;
56  		try {
57  			resultadoParseo = parser.parse(s);
58  			interpreter.validateSentence(resultadoParseo);
59  			queryPlanner.execute(resultadoParseo);
60  		} catch (SQLParserException exInvalidSQL) {
61  			resultadoParseo = null;
62  		} catch (SentenceValidationException exValidationError) {
63  			resultadoParseo = null;
64  		}
65  
66  		if (resultadoParseo == null) {
67  			System.out.println("Parseo Reportándose: No funciono!");
68  		} else {
69  			System.out.println("Parseo Reportándose: "
70  					+ resultadoParseo.toString());
71  		}
72  		return converter.stringFromCurrentRequest();
73  	}
74  
75  	private Database database(File databaseDirectory) {
76  		try {
77  			Database db = new FileSystemDatabase(databaseDirectory);
78  			return db;
79  		} catch (Exception e) {
80  			throw new RuntimeException(e);
81  		}
82  	}
83  
84  }